package com.laixu.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class User {
    public static void main(String[] args) {
        // 1. 创建目标对象
        Singer target = new Target();

        // 2. 获取目标类的类加载器
        ClassLoader loader = Target.class.getClassLoader();

        // 3. 获取目标类实现的接口列表
        Class<?>[] interfaces = Target.class.getInterfaces();

        // 4. 创建 InvocationHandler 实现类
        InvocationHandler handler = new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                // 代理增强逻辑
                System.out.println("安排时间");
                System.out.println("联系场地");
                System.out.println("安全保障");
                System.out.println("合同签订");
                System.out.println("费用结算");
                System.out.println("------------");

                // 反射调用目标方法
                Object result = method.invoke(target, args);
                return result;
            }
        };

        // 5. 动态生成代理对象
        Singer proxy = (Singer) Proxy.newProxyInstance(loader, interfaces, handler);//目标加载类，目标类实现的接口，代理增强逻辑

        // 6. 调用代理对象的 sing 方法
        proxy.sing();

        // 7. 打印代理对象的真实类型
        System.out.println("代理对象proxy的真实类型：" + proxy.getClass());
    }
}